package com.glp.work.flow.service;

import com.github.pagehelper.PageInfo;
import com.glp.work.flow.pojo.WfForm;
import com.glp.work.flow.pojo.WfFormExample;
import com.glp.work.flow.request.WfFormDTO;

import java.util.Map;

/**
 * 表单service
 *
 * @author jhuang1
 */
public interface WfFormService {

    /**
     * 表单列表查询
     *
     * @param wfFormDTO 查询参数
     * @return 表单列表
     */
    PageInfo<WfFormDTO> queryFormList(WfFormDTO wfFormDTO);

    /**
     * 新增表单配置
     *
     * @param wfForm 表单对象
     */
    void insertForm(WfForm wfForm);

    /**
     * 修改表单
     *
     * @param wfForm 表单对象
     */
    void updateForm(WfForm wfForm);

    /**
     * 修改表单状态
     *
     * @param wfForm 表单对象
     */
    void updateFormStatus(WfForm wfForm);

    /**
     * 查询表单名词
     *
     * @param id 表单ID
     * @return wfForm 表单对象
     */
    WfForm queryFormDetail(Long id);

    /**
     * 初始化表单
     *
     * @param procDefKey  流程定义ID
     * @param processId   流程实例ID
     * @param dynamicForm 表单数据
     */
    void initForm(String procDefKey, String processId, Map<String, Object> dynamicForm);


    /**
     * 查询当前流程实例所处节点表单实例
     *
     * @param processId 流程实例ID
     * @return WfFormExample 表单实例
     */
    WfFormExample queryFormExample(String processId);


    /**
     * 查询流程实例历史处理节点表单实例
     *
     * @param processId 流程实例ID
     * @return WfFormExample 表单实例
     */
    WfFormExample queryHistoryFormExample(String processId);

    /**
     * 更新表单数据
     *
     * @param processId 流程实例ID
     * @param formData  数据集合
     */
    void updateFormData(String processId, Map<String, Object> formData);

    int findActRuExecution(String procDefId);

    public int findActRuTaskByFormKey(String formKey);

    /**
     * 根据任务ID查询表单
     * @param taskId
     * @return
     */
    public WfFormExample queryFormExampleByTaskId(String proccessId, String taskId);
}
